#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,a,b,root,fa[N];
vector<int> son[N] ;
int sq[N],top,ans[N][2];
int dep[N],deepl[N],eb[N],ea[N];
void dfs1(int now,int fat) {
	fa[now]=fat;
	dep[now]=deepl[now]=dep[fat]+1;
	eb[now]=now;
	for(int i=0;i<son[now].size();i++) {
		int to=son[now][i];
		if(to==fat) continue ;
		dfs1(to,now);
		if(deepl[to]-dep[now]>=a) ea[now]++;
		deepl[now]=max(deepl[now],deepl[to]);
		eb[now]=min(eb[now],eb[to]);
	}
}
int to_ [N],id[N];
int cmp(int x,int y) {
	return dep[x]>dep[y] ;
}
void dfs2(int now,int fat) {
	sq[++top]=now;
	ans[now][1]=0x7f;
	if(top>a) to_[now]=sq[top-a];
	for(int i=0;i<son[now].size();i++) {
		int to=son[now][i];
		if(to==fat) continue ;
		dfs2(to,now);
	}
	--top;
}
signed main() {
	freopen("nim.in","r",stdin);
	freopen("nim.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>root>>a>>b;
	int u,v;
	for(int i=1;i<n;i++) {
		cin>>u>>v;
		son[u].push_back(v);
		son[v].push_back(u);
	}
	dfs1(root,0);
	if(a<=b) {
		cout<<eb[root];
		return 0;
	}
	dfs2(root,0);
	for(int i=1;i<=n;i++) id[i]=i;
	sort(id+1,id+n+1,cmp);
	for(int i=1;i<=n;i++) {
		int now=id[i];
		if(deepl[now]-dep[now]<a) {
			ans[now][0]=ans[now][1]=min(eb[now],ans[now][1]);
		}
		int o=now;
		for(int j=1;j<=b;j++) {
			int u=o;
			o=fa[o];
			if(!o) break ;
			if(ea[o]-(deepl[u]-dep[o]>=a?1:0)==0) {
				ans[now][1]=min(ans[now][1],o);
			} else {
				for(int k=0;k<son[o].size();k++) {
					int to=son[o][k];
					if(to==fa[o]||to==u) continue ;
					ans[now][1]=min(ans[now][1],ans[to][0]);
				}
			}
		}
		if(to_[now]) ans[to_[now]][0]=max(ans[to_[now]][0],ans[now][1]);
	}
	cout<<ans[root][0];
	return 0;
}
/*
9 6 2 1
1 3
1 6
2 4
2 5
2 7
3 9
4 6
4 8
*/
